#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

typedef unsigned char N1;
typedef unsigned long int N4;

#define STR '"'
#define ESC '\\'

#define BEG             do {
#define END             } while(0)
#define ERR1(s,n1)      BEG fprintf(stderr,s,n1); \
                        fflush(stdout); fflush(stderr); \
                        return (-1); END

int main(int argc,char **argv)
{ N1 cc,c1,c2,c0; int ii; N4 n,m;
  N1 str=0,esc=0;

#if defined(___OS_WIN)
  setmode(fileno(stdin),O_BINARY);
  setmode(fileno(stdout),O_BINARY);
  setmode(fileno(stderr),O_BINARY);
#endif

  c1=(N1)'A'; c2=c1+15;
  c0=0; n=0; m=1;

  while (1)
  { ii=fgetc(stdin);
    if (ii==-1) break;
    else cc=(N1)ii;
    if (cc=='\n') ++m;
    if (str)
    { if (esc)
      { esc=0; switch (cc)
        { case 'n': cc='\n'; break;
          case 'r': cc='\r'; break;
          case 't': cc='\t'; break;
        }
      } else switch (cc)
      { case STR: str=0; continue;
        case ESC: esc=1; continue;
      }
      fputc(cc,stdout); continue;
    }
    if (cc==STR)
    { if (n&1)
        ERR1("Error: Syntax: %lu\n",m);
      c0=0; str=1; continue;
    }
    if (cc<c1 || cc>c2)
    { if (n&1)
        ERR1("Error: Syntax: %lu\n",m);
      c0=0; continue;
    }
    c0=(c0<<4)|(cc-c1);
    if (++n&1) continue;
    fputc(c0,stdout); c0=0;
  }
  if ((n&1) || str)
    ERR1("Error: Syntax: %lu\n",m);
  fflush(stdout);

  return (0);
}
